package com.example.caffeine.util;

import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import com.github.benmanes.caffeine.cache.Policy;
import com.github.benmanes.caffeine.cache.RemovalListener;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

@Component
public class CaffeineTemplate {
    /**定义缓存大小*/
    private static final int MAXIMUM_SIZE = 1000;
    /**定义Cache对象*/
    private Cache<String, Object> cache;

    public CaffeineTemplate() {
        //初始化Cache对象
        cache = Caffeine.newBuilder()
                .maximumSize(MAXIMUM_SIZE)
                .expireAfterWrite(5, TimeUnit.MINUTES) // 设置缓存项在写入后5分钟内过期
                .build();//建造模式(构建复杂对象时候,一般建议使用建造模式)
    }

    /**向缓存添加数据*/
    public void put(String key, Object value) {
        cache.put(key, value);
    }

    /**从缓存取数据*/
    public Object get(String key) {
        return cache.getIfPresent(key);
    }

    /**移除缓存数据*/
    public void remove(String key) {
        cache.invalidate(key);
    }
    public void clear(){
        cache.invalidateAll();
    }
}
